#include <iostream>
using namespace std;
// 定义鸟类结构体
// std::string 是 C++ 标准库中的一个类,用于表示和操作字符串。
// 它是一个动态字符数组,可以容纳任意数量的字符,并且可以自动扩展以容纳更多的字符。
struct Bird
{
private:
    std::string name;    // 新增名字属性
    std::string species; // 新增物种属性
    int age;             // 新增年龄属性
    int health;          // 新增健康值属性

public:
    // 构造函数
    Bird(std::string name, std::string species, int age, int health)
    {
        this->name = name;
        this->species = species;
        this->age = age;
        this->health = health;
    }

    // 飞行行为
    void fly()
    {
        if (health > 0)
        {
            std::cout << name << " 在飞" << std::endl;
        }
        else
        {
            std::cout << name << " 生病不能飞了." << std::endl;
        }
    }

    // 唱歌行为
    void sing()
    {
        if (health > 0)
        {
            std::cout << name << " 在唱歌" << std::endl;
        }
        else
        {
            std::cout << name << " 生病不能唱歌了." << std::endl;
        }
    }

    // 年龄增长规则
    void ageIncrement()
    {
        if (age < 10)
        {
            age++;
        }
        else
        {
            std::cout << name << " 老了不能起飞和唱歌了." << std::endl;
        }
    }

    // 健康值变化规则
    void changeHealth(int value)
    {
        health += value;
        if (health < 0)
        {
            health = 0;
        }
        if (health > 100)
        {
            health = 100;
        }
    }
};

int main()
{
    // 创建鸟类对象
    Bird bird1("Tweety", "金丝雀", 2, 11);

    // 调用鸟类的行为
    bird1.fly();
    bird1.sing();

    // 调用规则方法
    bird1.ageIncrement();    // 模拟年龄增长
    bird1.changeHealth(-10); // 模拟健康值下降

    // 再次调用鸟类的行为
    bird1.fly();
    bird1.sing();

    return 0;
}
